home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
xpaint-2.1.1
/
size.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-03
|
4KB
|
132 lines
/* +-------------------------------------------------------------------+ */
/* | Copyright 1992, 1993, David Koblas (koblas@netcom.com) | */
/* | | */
/* | Permission to use, copy, modify, and to distribute this software | */
/* | and its documentation for any purpose is hereby granted without | */
/* | fee, provided that the above copyright notice appear in all | */
/* | copies and that both that copyright notice and this permission | */
/* | notice appear in supporting documentation. There is no | */
/* | representations about the suitability of this software for | */
/* | any purpose. this software is provided "as is" without express | */
/* | or implied warranty. | */
/* | | */
/* +-------------------------------------------------------------------+ */
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Toggle.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/AsciiText.h>
#include <X11/Xaw/Text.h>
#include <stdio.h>
#ifndef NOSTDHDRS
#include <stdlib.h>
#include <unistd.h>
#endif
#include "Paint.h"
#include "misc.h"
#include "text.h"
typedef struct {
Widget widget, paint;
Dimension w, h;
int z;
void (*func)(Widget, int, int, int);
} arg_t;
static void cancelSizeCallback(Widget w, XtPointer arg, XtPointer junk)
{
XtFree((XtPointer)arg);
}
static void sureCallback(Widget w, XtPointer argArg, XtPointer junk)
{
arg_t *arg = (arg_t *)argArg;
XtVaSetValues(arg->paint, XtNdrawWidth, arg->w,
XtNdrawHeight, arg->h,
NULL);
XtFree((XtPointer)arg);
}
static void okSizeCallback(Widget w, XtPointer argArg, XtPointer infoArg)
{
arg_t *arg = (arg_t *)argArg;
TextPromptInfo *info = (TextPromptInfo *)infoArg;
Dimension width, height;
arg->w = atoi(info->prompts[0].rstr);
arg->h = atoi(info->prompts[1].rstr);
if (arg->paint == None)
arg->z = atoi(info->prompts[2].rstr);
if (arg->paint != None)
XtVaGetValues(arg->paint, XtNdrawWidth, &width,
XtNdrawHeight, &height,
NULL);
if (arg->w <= 0) {
Notice(w, "Invalid width");
} else if (arg->h <= 0) {
Notice(w, "Invalid height");
} else if (arg->paint == None) {
arg->func(arg->widget, arg->w, arg->h, arg->z);
} else if (arg->w != width || arg->h != height) {
AlertBox(GetShell(arg->paint), "Warning this operation is cannot be undone\nContinue?",
sureCallback, cancelSizeCallback, arg);
/* don't free */
return;
}
XtFree((XtPointer)arg);
}
void SizeSelect(Widget w, Widget paint, void (*func)(Widget, int, int, int))
{
static TextPromptInfo info;
static struct textPromptInfo values[4];
int width, height, zoom;
arg_t *arg = XtNew(arg_t);
char bufA[16], bufB[16], bufC[16];
info.prompts = values;
info.nprompt = (paint == None) ? 3 : 2;
info.title = "Enter the desired image size:";
values[0].prompt = "Width:";
values[0].str = bufA;
values[0].len = 5;
values[1].prompt = "Height:";
values[1].str = bufB;
values[1].len = 5;
values[2].prompt = "Zoom:";
values[2].str = bufC;
values[2].len = 5;
if (paint != None) {
XtVaGetValues(paint, XtNdrawWidth, &width,
XtNdrawHeight, &height,
XtNzoom, &zoom,
NULL);
} else {
GetDefaultWH(&width, &height);
zoom = 1;
}
sprintf(bufA, "%d", (int)width);
sprintf(bufB, "%d", (int)height);
sprintf(bufC, "%d", (int)zoom);
arg->widget = w;
arg->paint = paint;
arg->func = func;
TextPrompt(w, "sizeselect", &info, okSizeCallback, cancelSizeCallback, arg);
}